// pages/login/login.js
const util = require('../../utils/util')
const app = getApp()

Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    hasUserInfo: false,
    userInfo: {}
  },

  onLoad() {
    // 检查是否已经授权
    if (app.globalData.userInfo) {
      this.setData({
        hasUserInfo: true,
        userInfo: app.globalData.userInfo
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          hasUserInfo: true,
          userInfo: res.userInfo
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            hasUserInfo: true,
            userInfo: res.userInfo
          })
        }
      })
    }
  },

  // 微信登录
  async wxLogin() {
    try {
      util.showLoading('登录中...')
      
      // 获取登录凭证
      const loginRes = await this.getWxCode()
      if (!loginRes.code) {
        throw new Error('获取登录凭证失败')
      }

      // 发送登录请求到后端
      const res = await util.request('/auth/wechat-login', {
        method: 'POST',
        data: {
          code: loginRes.code
        }
      })

      if (res.code === 200) {
        // 保存token和用户信息
        wx.setStorageSync('token', res.data.token)
        app.globalData.token = res.data.token
        app.globalData.userInfo = res.data.user
        
        util.showToast('登录成功', 'success')
        
        // 延迟跳转到首页
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/index/index'
          })
        }, 1500)
      } else {
        throw new Error(res.message || '登录失败')
      }
    } catch (error) {
      console.error('登录失败:', error)
      util.showToast(error.message || '登录失败，请重试')
    } finally {
      util.hideLoading()
    }
  },

  // 获取微信登录凭证
  getWxCode() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: resolve,
        fail: reject
      })
    })
  },

  // 获取用户信息（兼容旧版本）
  getUserInfo(e) {
    if (e.detail.userInfo) {
      app.globalData.userInfo = e.detail.userInfo
      this.setData({
        hasUserInfo: true,
        userInfo: e.detail.userInfo
      })
    }
  },

  // 手机号授权登录
  async getPhoneNumber(e) {
    if (e.detail.errMsg === 'getPhoneNumber:ok') {
      try {
        util.showLoading('获取手机号中...')
        
        // 这里可以将加密数据发送到后端解密获取手机号
        const res = await util.request('/auth/get-phone', {
          method: 'POST',
          data: {
            encryptedData: e.detail.encryptedData,
            iv: e.detail.iv
          }
        })
        
        if (res.code === 200) {
          util.showToast('获取手机号成功', 'success')
          // 可以在这里处理手机号相关逻辑
        } else {
          util.showToast(res.message || '获取手机号失败')
        }
      } catch (error) {
        console.error('获取手机号失败:', error)
        util.showToast('获取手机号失败')
      } finally {
        util.hideLoading()
      }
    } else {
      util.showToast('取消授权')
    }
  },

  // 返回首页
  goHome() {
    wx.switchTab({
      url: '/pages/index/index'
    })
  }
})